#pragma once
#include<iostream>
#include<spdlog/spdlog.h>
#include<spdlog/sinks/stdout_color_sinks.h>
#include</usr/include/spdlog/sinks/basic_file_sink.h>
#include<spdlog/async.h>
//这个文件是对spdlog的封装
//对配置进行特例化，不需要任何额外传参，直接通过调用特定函数打印日志
namespace zzy_mims
{
std::shared_ptr<spdlog::logger> g_my_logger;
//设置运行模式，日志存放的文件，生成日志的等级
void init_logger(bool mod,const std::string &file,spdlog::level::level_enum level)
{
    spdlog::flush_every(std::chrono::seconds(1));
    if(mod)
        g_my_logger = spdlog::basic_logger_mt("run_logger",file);
    else 
        g_my_logger = spdlog::stdout_color_mt("debug_logger");
    g_my_logger->set_level(level);
    g_my_logger->flush_on(level);
    g_my_logger->set_pattern("[%n][%H:%M:%S][%t][%-8l]%v");
};
#define LOG_TRACE(format,...) zzy_mims::g_my_logger->trace((std::string)"[{}:{}] "+format,__FILE__,__LINE__,##__VA_ARGS__)
#define LOG_DEBUG(format,...) zzy_mims::g_my_logger->debug((std::string)"[{}:{}] "+format,__FILE__,__LINE__,##__VA_ARGS__)
#define LOG_INFO(format,...) zzy_mims::g_my_logger->info((std::string)"[{}:{}] "+format,__FILE__,__LINE__,##__VA_ARGS__)
#define LOG_WARN(format,...) zzy_mims::g_my_logger->warn((std::string)"[{}:{}] "+format,__FILE__,__LINE__,##__VA_ARGS__)
#define LOG_ERROR(format,...) zzy_mims::g_my_logger->error((std::string)"[{}:{}] "+format,__FILE__,__LINE__,##__VA_ARGS__)
#define LOG_CRITICAL(format,...) zzy_mims::g_my_logger->critical((std::string)"[{}:{}] "+format,__FILE__,__LINE__,##__VA_ARGS__)
};